package casamento.util;
 
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;

 
@SuppressWarnings("serial")
public class AutorizaListener implements PhaseListener {
 
    public void afterPhase(PhaseEvent event) {
       
    	// Obtém o contexto atual
        FacesContext contexto = event.getFacesContext();
        
        // Obtém a página que atualmente está interagindo com o ciclo
        String paginaAtual = contexto.getViewRoot().getViewId();
       
        // Se for a página 'index.xhtml' seta a variável como true
        boolean isLoginPage = paginaAtual.lastIndexOf("index.xhtml") > -1;
      
        // Obtém a sessão atual
        HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(true);
        
        // Restaga o nome do usuário logado
        String usuario = (String) sessao.getAttribute("usuario");
        
        // Verifica se o usuário está logado e se não está na página de login
        if (!isLoginPage && usuario == null) {
            
        	// Redireciona o fluxo para a página de login
            NavigationHandler nh = contexto.getApplication().getNavigationHandler();
            nh.handleNavigation(contexto, null, "sair");
            
        } else if (!isLoginPage && usuario != null) {
            
        	// Se o usuário logado tentar acessar a página de login ele é
            // redirecionado para a página inicial
            NavigationHandler nh = contexto.getApplication().getNavigationHandler();
            nh.handleNavigation(contexto, null, "sucesso");
        }
    }
 
    public void beforePhase(PhaseEvent event) {
 
    }
 
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
}